﻿#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int DataType;

typedef struct ListNode {
	DataType data;
	struct ListNode* next;
}ListNode;

// 无头单链表-工具函数
// 动态申请节点
ListNode* BuyListNode(DataType elem);


// 无头单链表-基本操作函数
// 单链表头部插入
void SingleListPushFront(ListNode** list, DataType elem);
// 单链表头部删除
void SingleListPopFront(ListNode** list);
// 单链表尾部插入
void SingleListPushBack(ListNode** list, DataType elem);
// 单链表尾部删除
void SingleListPopBack(ListNode** list);
// 单链表pos位置后插入x
void SingleListInsertAfter(ListNode** list, size_t pos, DataType elem);
// 单链表删除pos位置后元素
void SingleListEraseAfter(ListNode** list, size_t pos);
// 单链表查找元素 - 返回对应元素节点
ListNode* SingleListFind(ListNode* list, DataType data);
// 单链表长度
size_t SingleListLength(ListNode* list);
// 遍历单链表
void SingleListTraverse(ListNode* list);